"ui";
// 检查无障碍
auto.waitFor();

// 持久化
let config = storages.create("config")
// 初始化ui
init_ui();
// 加载配置
loadConf()
// 引入自定义插件
const control = require("./control.js")
function init_ui() {
    ui.layout(
        <vertical>
            <appbar>
                <toolbar title="WiFi代理设置"/>
            </appbar>
            <vertical padding="16">
                <vertical>
                    <text>代理IP</text>
                    <input id="proxy_ip" text="192.168.0.101"/>
                    <text>代理端口</text>
                    <radiogroup orientation="horizontal">
                        <radio text="8080" id="port_1" marginRight="16" checked="true"></radio>
                        <radio text="8888" id="port_2" marginRight="16"></radio>
                        <radio text="8866" id="port_3" marginRight="16"></radio>
                    </radiogroup>
                </vertical>

                <vertical marginTop="16">
                    <text>[Android 7]</text>
                    <horizontal>
                        <button id="open_android_7" text="开启代理" marginRight="10" style="Widget.AppCompat.Button.Colored"/>
                        <button id="close_android_7" text="关闭代理"/>
                    </horizontal>
                </vertical>

                <vertical marginTop="16">
                    <text>[Android 9]</text>
                    <horizontal>
                        <button id="open_android_9" text="开启代理" marginRight="10" style="Widget.AppCompat.Button.Colored"/>
                        <button id="close_android_9" text="关闭代理"/>
                    </horizontal>
                </vertical>

                <vertical marginTop="16">
                    <text>[Android 10]</text>
                    <horizontal>
                        <button id="open_android_10" text="开启代理" marginRight="10" style="Widget.AppCompat.Button.Colored"/>
                        <button id="close_android_10" text="关闭代理"/>
                    </horizontal>
                </vertical>

                <vertical marginTop="16">
                    <text>[Android 14]</text>
                    <horizontal>
                        <button id="open_android_14" text="开启代理" marginRight="10" style="Widget.AppCompat.Button.Colored"/>
                        <button id="close_android_14" text="关闭代理"/>
                    </horizontal>
                </vertical>
            </vertical>
        </vertical>
    );

    // Android 7
    ui.open_android_7.click(function(){
        let proxy_ip = ui.proxy_ip.getText();
        // ...
        threads.start(function(){
            open_android_7_handler(proxy_ip, getProxyPort());
        });
    });
    ui.close_android_7.click(function(){
        threads.start(function(){
            close_android_7_handler();
        });
    });

    // Android 9
    ui.open_android_9.click(function(){
        let proxy_ip = ui.proxy_ip.getText();
        // ...
        threads.start(function(){
            open_android_9_handler(proxy_ip, getProxyPort());
        });
    });
    ui.close_android_9.click(function(){
        threads.start(function(){
            close_android_9_handler();
        });
    });

    // Android 10
    ui.open_android_10.click(function(){
        let proxy_ip = ui.proxy_ip.getText();
        // ...
        threads.start(function(){
            open_android_10_handler(proxy_ip, getProxyPort());
        });
    });
    ui.close_android_10.click(function(){
        threads.start(function(){
            close_android_10_handler();
        });
    });

    // Android 14
    ui.open_android_14.click(function(){
        let proxy_ip = ui.proxy_ip.getText();
        // ...
        threads.start(function(){
            open_android_14_handler(proxy_ip, getProxyPort);
        });
    });
    ui.close_android_14.click(function(){
        threads.start(function(){
            close_android_14_handler();
        });
    });
}

/**
 * 获取代理端口
 * @returns {number}
 */
function getProxyPort(){
    let proxy_port = 8080
    if (ui.port_1.isChecked()){
        proxy_port = ui.port_1.getText()
    }else if(ui.port_2.isChecked()){
        proxy_port = ui.port_2.getText()
    }else if(ui.port_3.isChecked()){
        proxy_port = ui.port_3.getText()
    }
    return proxy_port
}

/**
 * 读取配置
 */
function loadConf(){
    let proxy_ip = config.get("proxy_ip")
    if (null != proxy_ip){
        ui.proxy_ip.setText(proxy_ip)
    }
    let proxy_port = config.get("proxy_port")
    if (null != proxy_port){
        proxy_port = parseInt(proxy_port)
        if (proxy_port == 8080){
            ui.port_1.checked = true
        }else if(proxy_port == 8888){
            ui.port_2.checked = true
        }else if(proxy_port == 8866){
            ui.port_3.checked = true
        }
    }
}

/**
 * 保存配置
 */
function saveConf(){
    let proxy_ip = ui.proxy_ip.text()
    config.put("proxy_ip",proxy_ip)
    let proxy_port = getProxyPort()
    config.put("proxy_port",proxy_port)
}

/**
 * 开启代理（Android 7）
 * @param proxy_ip
 * @param proxy_port
 */
function open_android_7_handler(proxy_ip, proxy_port) {
    // 保存配置
    saveConf()
    toast("自动开启代理 " + proxy_ip + ":" + proxy_port);

    // 打开设置
    let settingsPackageName = app.getPackageName("设置");
    app.launchPackage(settingsPackageName)
    waitForPackage(settingsPackageName)

    // 滚动到顶部
    scrollUp();

    // 点击 WLAN
    while(!click("WLAN", 0));

    // 长按 第一个已连接的WIFI
    while(!longClick("已连接", 0));

    // 点击 修改网络
    while(!click("修改网络", 0));
    sleep(500);
    back();
    sleep(500);

    // 判断是否已经设置代理
    if (text("手动").exists()) {
        // 点击 代理设置--手动
        while(!click("手动", 0));
        // 点击 代理设置--手动
        while(!click("手动", 0));
    } else {
        // 点击 高级选项
        while(!click("高级选项", 0));
        // 点击 代理设置--无
        while(!click("无", 0));
        // 点击 代理设置--手动
        while(!click("手动", 0));
    }

    // 设置ip、port
    id("proxy_hostname").findOne().setText("" + proxy_ip);
    id("proxy_port").findOne().setText("" + proxy_port);

    // 点击 保存
    while(!click("保存", 0));

    // 返回
    home();
    toast("自动开启代理完毕");
}

/**
 * 关闭代理（Android 7）
 */
function close_android_7_handler() {
    toast("自动关闭代理");

    // 打开设置
    let settingsPackageName = app.getPackageName("设置");
    app.launchPackage(settingsPackageName)
    waitForPackage(settingsPackageName)

    // 滚动到顶部
    scrollUp();

    // 点击 WLAN
    while(!click("WLAN", 0));

    // 长按 第一个已连接的WIFI
    while(!longClick("已连接", 0));

    // 点击 修改网络
    while(!click("修改网络", 0));
    sleep(500);
    back();
    sleep(500);

    // 判断是否已经设置代理
    if (text("手动").exists()) {
        // 点击 代理设置--手动
        while(!click("手动", 0));

        // 点击 代理设置--无
        while(!click("无", 0));
    }

    // 点击 保存
    while(!click("保存", 0));

    // 返回
    home();
    toast("自动关闭代理完毕");
}

/**
 * 开启代理（Android 9）
 * @param proxy_ip
 * @param proxy_port
 */
function open_android_9_handler(proxy_ip, proxy_port) {
    // 保存配置
    saveConf()
    toast("自动开启代理 " + proxy_ip + ":" + proxy_port);

    // 打开设置
    let settingsPackageName = app.getPackageName("设置");
    app.launchPackage(settingsPackageName)
    waitForPackage(settingsPackageName)

    // 滚动到顶部
    scrollUp();

    // 点击 WLAN
    while(!click("WLAN", 0));
    sleep(500);

    // 点击 WLAN
    while(!click("WLAN", 0));

    // 点击 已连接
    while(!click("已连接", 0));

    // 点击 修改
    className("android.widget.TextView").desc("修改").findOne().click();
    sleep(500);
    back();
    sleep(500);

    // 判断是否已经设置代理
    if (text("手动").exists()) {
        // 点击 代理设置--手动
        while(!click("手动", 0));
        // 点击 代理设置--手动
        while(!click("手动", 0));
    } else {
        // 点击 高级选项
        while(!click("高级选项", 0));
        // 点击 代理设置--无
        while(!click("无", 0));
        // 点击 代理设置--手动
        while(!click("手动", 0));
    }

    // 设置ip、port
    id("proxy_hostname").findOne().setText("" + proxy_ip);
    id("proxy_port").findOne().setText("" + proxy_port);

    // 点击 保存
    while(!click("保存", 0));

    // 返回
    home();
    toast("自动开启代理完毕");
}

/**
 * 关闭代理（Android 9）
 */
function close_android_9_handler() {
    toast("自动关闭代理");

    // 打开设置
    let settingsPackageName = app.getPackageName("设置");
    app.launchPackage(settingsPackageName)
    waitForPackage(settingsPackageName)

    // 滚动到顶部
    scrollUp();

    // 点击 WLAN
    while(!click("WLAN", 0));
    sleep(500);

    // 点击 WLAN
    while(!click("WLAN", 0));

    // 点击 已连接
    while(!click("已连接", 0));

    // 点击 修改
    className("android.widget.TextView").desc("修改").findOne().click();
    sleep(500);
    back();
    sleep(500);

    // 判断是否已经设置代理
    if (text("手动").exists()) {
        // 点击 代理设置--手动
        while(!click("手动", 0));

        // 点击 代理设置--无
        while(!click("无", 0));
    }

    // 点击 保存
    while(!click("保存", 0));

    // 返回
    home();
    toast("自动关闭代理完毕");
}

/**
 * 开启代理（Android 10）
 * @param proxy_ip
 * @param proxy_port
 */
function open_android_10_handler(proxy_ip, proxy_port) {
    // 保存配置
    saveConf()

    // 打开设置
    let settingsPackageName = app.getPackageName("设置");
    app.launchPackage(settingsPackageName)
    waitForPackage(settingsPackageName)

    // 滚动到顶部
    scrollUp();

    // 点击第一个 WLAN
    click("WLAN", 0)

    // 等待已连接出现
    let element = control.waitForElement("已连接", 2000)
    if (null == element) {
        control.toast("未发现WIFI已连接，程序停止运行！")
        exit()
    }
    sleep(500);
    // 长按已连接
    control.longClick(element)
    // 等待修改出现
    element = control.waitForElement("修改网络", 2000)
    if (null == element) {
        control.toast("未发现修改网络，程序停止运行！")
        exit()
    }
    // 点击修改网络
    control.click(element)
    // 等待显示高级选项
    element = control.waitForElement("显示高级选项", 2000)
    if (null == element) {
        control.toast("未发现显示高级选项，程序停止运行！")
        exit()
    }
    // 选中显示高级选项
    control.check(element, control.waitForElement, "显示高级选项", 2000)
    // 等待代理文字出现
    element = control.waitForElement("代理", 2000)
    if (null == element) {
        control.toast("未发现代理，程序停止运行！")
        exit()
    }
    element = control.waitForElement("无", 2000)
    if (element) {
        // 点击无
        control.click(element)
        // 等待手动文字出现
        element = control.waitForElement("手动", 2000)
        if (null == element) {
            control.toast("未发现手动，程序停止运行！")
            exit()
        }
        sleep(500);
        // 选中手动
        control.click(element)
    }
    // 等待保存文字出现
    element = control.waitForElement("保存", 2000)
    if (null == element) {
        control.toast("未发现保存，程序停止运行！")
        exit()
    }
    // 设置host
    element = id("com.android.settings:id/proxy_hostname").findOnce()
    if (null == element) {
        control.toast("未发现可设置服务器主机名，程序停止运行！")
        exit()
    }
    element.setText("" + proxy_ip)
    // 设置端口
    element = id("com.android.settings:id/proxy_port").findOnce()
    if (null == element) {
        control.toast("未发现可设置服务器端口，程序停止运行！")
        exit()
    }
    element.setText("" + proxy_port)
    // 等待保存文字出现
    element = control.waitForElement("保存", 2000)
    if (null == element) {
        control.toast("未发现保存，程序停止运行！")
        exit()
    }
    // 点击保存
    control.click(element)
    // 回到首页
    home();
    toast("代理已开启");
}

/**
 * 关闭代理（Android 10）
 */
function close_android_10_handler() {
    // 打开设置
    let settingsPackageName = app.getPackageName("设置");
    app.launchPackage(settingsPackageName)
    waitForPackage(settingsPackageName)

    // 滚动到顶部
    scrollUp();

    // 点击第一个 WLAN
    click("WLAN", 0)

    // 等待已连接出现
    let element = control.waitForElement("已连接", 2000)
    if (null == element) {
        control.toast("未发现WIFI已连接，程序停止运行！")
        exit()
    }
    sleep(500);
    // 长按已连接
    control.longClick(element)
    // 等待修改出现
    element = control.waitForElement("修改网络", 2000)
    if (null == element) {
        control.toast("未发现修改网络，程序停止运行！")
        exit()
    }
    // 点击修改网络
    control.click(element)
    // 等待显示高级选项
    element = control.waitForElement("显示高级选项", 2000)
    if (null == element) {
        control.toast("未发现显示高级选项，程序停止运行！")
        exit()
    }
    // 选中显示高级选项
    control.check(element, control.waitForElement, "显示高级选项", 2000)
    // 等待代理文字出现
    element = control.waitForElement("代理", 2000)
    if (null == element) {
        control.toast("未发现代理，程序停止运行！")
        exit()
    }
    // 判断是否开启了
    if (!text("无").exists()){
        // 已开启需要关闭，点击代理
        sleep(500)
        control.click(element)
        element = control.waitForElement("无", 2000)
        if (null == element) {
            control.toast("未发现无，程序停止运行！")
            exit()
        }
        sleep(500)
        // 点击无
        control.click(element)
        // 等待保存文字出现
        element = control.waitForElement("保存", 2000)
        if (null == element) {
            control.toast("未发现保存，程序停止运行！")
            exit()
        }
        // 点击保存
        control.click(element)
    }
    // 回到首页
    home();
    toast("代理已关闭");
}

/**
 * 开启代理（Android 14）
 * @param proxy_ip
 * @param proxy_port
 */
function open_android_14_handler(proxy_ip, proxy_port) {

}

/**
 * 关闭代理（Android 14）
 */
function close_android_14_handler() {

}
